package org.jeecg.modules.coursearrangeatom.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.classes.entity.CouClass;
import org.jeecg.modules.classes.mapper.CouClassMapper;
import org.jeecg.modules.classes.service.ICouClassService;
import org.jeecg.modules.classroom.entity.FacClassroom;
import org.jeecg.modules.classroom.service.IFacClassroomService;
import org.jeecg.modules.coucoursearrange.entity.CouCourseArrange;
import org.jeecg.modules.coucoursearrange.mapper.CouCourseArrangeMapper;
import org.jeecg.modules.coursearrangeatom.entity.CouCourseArrangeAtom;
import org.jeecg.modules.coursearrangeatom.mapper.CouCourseArrAtomDictMapper;
import org.jeecg.modules.coursearrangeatom.mapper.CouCourseArrangeAtomMapper;
import org.jeecg.modules.coursearrangeatom.service.ICouCourseArrangeAtomService;
import org.jeecg.modules.coursearrangeatom.vo.*;
import org.jeecg.modules.courseschetemplate.entity.CouCoursescheduleTemplate;
import org.jeecg.modules.subject.entity.CouSubject;
import org.jeecg.modules.subject.service.ICouSubjectService;
import org.jeecg.modules.teacher.entity.TeaTeacher;
import org.jeecg.modules.teacher.service.ITeaTeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import java.util.*;

/**
 * @Description: cou_course_arrange_atom
 * @author: baochangrong
 * @Date: 2022-02-23
 * @Version: V1.0
 */
@Service
public class CouCourseArrangeAtomServiceImpl extends ServiceImpl<CouCourseArrangeAtomMapper, CouCourseArrangeAtom> implements ICouCourseArrangeAtomService {

    @Autowired
    CouCourseArrangeAtomMapper couCourseArrangeAtomMapper;
    @Autowired
    CouCourseArrAtomDictMapper couCourseArrAtomDictMapper;
    @Autowired
    CouCourseArrangeMapper couCourseArrangeMapper;
    @Autowired
    ICouClassService couClassService;
    @Autowired
    ICouSubjectService couSubjectService;
    @Autowired
    ITeaTeacherService teaTeacherService;
    @Autowired
    IFacClassroomService facClassroomService;

    @Override
    /**课表科目数据查询 */
    public List<CouCourseArrangeAtom> getCourseDataList(String courseArrangeId, String targetObjId, Integer relObjTtype, String selectTeacherIds) {
        //查询该班级对应的课表分配（课表计划状态为已经下发的，有效）
        CouCourseArrange couCourseArrange = couCourseArrangeMapper.couCourseArrangeByOId(targetObjId);
        courseArrangeId = couCourseArrange.getId();
        List<CouCourseArrangeAtom> couCourseArrangeAtomListAll = new ArrayList<CouCourseArrangeAtom>();
        //需要根据不同的类型（(1:班级;2:教室,3.老师;4.科目5学生)）去查不同的关联对象对应的name
        switch (relObjTtype) {
            case 1:
                List<CouCourseArrangeAtom> couCourseArrangeAtomList1 = couCourseArrangeAtomMapper.getClassDataList(courseArrangeId, targetObjId, relObjTtype);
                couCourseArrangeAtomListAll = couCourseArrangeAtomList1;
                break;
            case 2:
                List<CouCourseArrangeAtom> couCourseArrangeAtomList2 = couCourseArrangeAtomMapper.getClassRoomDataList(courseArrangeId, targetObjId, relObjTtype);
                couCourseArrangeAtomListAll = couCourseArrangeAtomList2;
                break;
            case 3:
                List<CouCourseArrangeAtom> couCourseArrangeAtomList3 = couCourseArrangeAtomMapper.getTeacherDataList(courseArrangeId, targetObjId, relObjTtype, selectTeacherIds);
                couCourseArrangeAtomListAll = couCourseArrangeAtomList3;
                break;
            case 4:
                List<CouCourseArrangeAtom> couCourseArrangeAtomList4 = couCourseArrangeAtomMapper.getCourseDataList(courseArrangeId, targetObjId, relObjTtype);
                couCourseArrangeAtomListAll = couCourseArrangeAtomList4;
                break;
//            case 5:
//                System.out.println("我是学生");
//                break;
            default:
                List<CouCourseArrangeAtom> couCourseArrangeAtomList_d = couCourseArrangeAtomMapper.getCourseDataList(courseArrangeId, targetObjId, relObjTtype);
                couCourseArrangeAtomListAll = couCourseArrangeAtomList_d;
        }

        for (CouCourseArrangeAtom couCourseArrangeAtom : couCourseArrangeAtomListAll) {
            if (couCourseArrangeAtom.getRelObjId().length() < 10) {
                String itemValue = couCourseArrangeAtom.getRelObjId();
                CouCourseArrAtomDictVo couCourseArrAtomDictVo = couCourseArrAtomDictMapper.couCourseArrAtomDict(itemValue);
                if (couCourseArrangeAtom.getRelObjId().equals(couCourseArrAtomDictVo.getItemValue())) {
                    couCourseArrangeAtom.setRelObjName(couCourseArrAtomDictVo.getItemText());
                }
            }
        }
        return couCourseArrangeAtomListAll;
    }


    /**
     * 冲突检测页 教师个人课表
     */
    @Override
    public List<CouCourseArrangeAtomVo> getArrangeAtomByObjId(CouCourseArrangeAtomVo couCourseArrangeAtomVo) {
        List<CouCourseArrangeAtomVo> couCourseArrangeAtomVos = couCourseArrangeAtomMapper.getArrangeAtomByObjId(couCourseArrangeAtomVo,0);

        return couCourseArrangeAtomVos;
    }
    /**
     * 冲突检测页 教师个人课表
     */
    @Override
    public List<CouCourseArrangeAtomVo> getArrangeAtomByObjId(CouCourseArrangeAtomVo couCourseArrangeAtomVo,int checkContradiction) {
        checkContradiction = oConvertUtils.isEmpty(checkContradiction) ? 0 : checkContradiction;
        List<CouCourseArrangeAtomVo> couCourseArrangeAtomVos = couCourseArrangeAtomMapper.getArrangeAtomByObjId(couCourseArrangeAtomVo,checkContradiction);

        return couCourseArrangeAtomVos;
    }


    /**
     * 通过视图 ===
     * 课表详情查询 listByCourseArrangeId
     */
    @Override
    public List<ViewCouCourseArrAtomVo> listByCourseArrangeId(ViewCouCourseArrAtomVo viewCouCourseArrAtomVo, Map<String,String> queryParam) {
        List<ViewCouCourseArrAtomVo> itemList = couCourseArrangeAtomMapper.listByCourseArrangeId(viewCouCourseArrAtomVo, queryParam);
        return itemList;
    }

    /* 全校全年级1张课表：查询同一时间上课的班级、老师、教室、科目,显示在1节课的位置
     * 需求：查询全校同时在上体育课的班级数量，判断操场是否够用，查询同时在上语文课的老师找到最少课的时间开展教研活动或开学科会议
     * 扩展需求：查询某教室同时使用的班级数量，查询某老师同时上课的班级数量
     * 查询单科全校课表：查询全年级的语文课、查询全年级的体育课，得到1张课表
     * 查询全校课表：查询全年级没课的班级、查询全年级在上体育课的班级，得到1张课表
     *  */
    @Override
    public List<CouCourseArrangeOneTableVo> queryCouArrangeAtomByObjectType(CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllPro,Map<String,String> queryParam){
        return couCourseArrangeAtomMapper.queryCouArrangeAtomByObjectType(couCourseArrangeAtomAllPro, queryParam);
    }

    /**
     * 查询全校各班级课表：查询各个班级的课表，得到N个班级的N张课表
     * @return
     */
    @Override
    public List<CouCourseArrangeAtomAllProVo> queryCouArrangeAtomByGradeIdsOrClassIds( CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllPro,Map<String,String> queryParam){
        return couCourseArrangeAtomMapper.queryCouArrangeAtomByGradeIdsOrClassIds(couCourseArrangeAtomAllPro, queryParam);
    }

    @Override
    public List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCourscheTemplate(String coursescheduleTemplateId){
        return couCourseArrangeAtomMapper.getNewCouCourseArrangeAtomByCourscheTemplate(coursescheduleTemplateId);
    }
    @Override
    public List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCouCourseArrange(CouCourseArrange couCourseArrange){
        return couCourseArrangeAtomMapper.getNewCouCourseArrangeAtomByCouCourseArrange(couCourseArrange);
    }

    @Override
    public List<CouCourseArrangeAtom> getNewTeacherByCouCourseArrange(CouCourseArrange couCourseArrange){

        return couCourseArrangeAtomMapper.getNewTeacherByCouCourseArrange(couCourseArrange);
    }

    @Override
    public List<CouCourseArrangeAtom> getNewClassroomByCouCourseArrange(CouCourseArrange couCourseArrange){

        return couCourseArrangeAtomMapper.getNewClassroomByCouCourseArrange(couCourseArrange);
    }

}
